//导入数据库模型操作模块
const { createUser, findOneUser } = require('../models/userModel');
//导入bcrypt包
const bcrypt = require('bcryptjs');
//导入生成token的包
const jwt = require('jsonwebtoken');
//导入全局的配置文件
const config = require('../config');

//注册新用户的处理函数
exports.reguser = async (req, res) => {
  //获取客户端提交到服务器的用户信息
  const userinfo = req.body;
  // console.log(req.ips);
  //检测用户名是否已注册，在数据库中查找
  const findRes = await findOneUser(userinfo);
  if (findRes !== null) {
    return res.sendMess('用户名被占用，请更换其他用户名！');
  }
  //调用bcrypt.hashSync()对密码进行加密
  userinfo.password = bcrypt.hashSync(userinfo.password, 10);
  //进行添加用户操作
  const createRes = await createUser(userinfo);
  if (!createRes) {
    // return res.send({ code: 400, message: '注册用户失败，请稍后再试！' })
    return res.sendMess('注册用户失败，请稍后再试！');
  }
  // res.send({ code: 0, message: '注册成功' });
  res.sendMess('注册成功', 201);
};

//登录的处理函数
exports.login = async (req, res) => {
  //接收表单数据
  const userinfo = req.body;

  //根据用户名查询用户信息
  const findRes = await findOneUser(userinfo);
  //在数据库中没有找到用户注册记录
  if (findRes === null) return res.sendMess('登录失败！');

  //判断密码是否正确
  const compareRes = bcrypt.compareSync(userinfo.password, findRes.password);
  if (!compareRes) return res.sendMess('登录失败！');

  //过滤用户信息中的密码字段
  const user = findRes._doc;
  delete user.password;
  //生成Token字符串
  const tokenStr = jwt.sign(user, config.jwtSecretKey, {
    expiresIn: config.expiresIn,
  });
  //调用res.send() 将token 响应给客户端
  // console.log(user);
  res.send({
    meta: {
      msg: '登录成功',
      status: 200,
    },
    data: {
      phone: user.phone.slice(0, 3) + '****' + user.phone.slice(7),
      token: 'Bearer ' + tokenStr,
    },
  });
};
